﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 版权所有 (c) 2022   保留所有权利。
 * CLR版本：4.0.30319.42000
 * 机器名称：DESKTOP-UL84BU5
 * 公司名称：
 * 命名空间：KingerRobot.WanliMDC.Biz
 * 唯一标识：7071c0f8-1899-4974-99f2-aecfdec5868e
 * 文件名：LineCuringBiz
 * 当前用户域：DESKTOP-UL84BU5
 * 
 * 创建者：zzl
 * 电子邮箱：1003590782@qq.com
 * 创建时间：2022/6/6 16:15:37
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace KingerRobot.MexicoSailunMDC.Biz;

/// <summary>
/// 7、硫化取胎位Biz：完成任务（线体协议）
/// </summary>
internal class FinishLineCuringBiz : K8.MDCBB.Biz
{
    private const string ClassName = nameof(FinishLineCuringBiz);
    #region 配置参数
    private ParamData Param { get; set; }

    class ParamData
    {
        /// <summary>
        /// 硫化取胎位
        /// </summary>
        public long Loc { get; set; }
    }
    #endregion

    #region PLC 通讯参数
    private ValueData Data { get; set; }
    class ValueData
    {
        /// <summary>
        /// 目标地址
        /// </summary>
        public long TargetLoc { get; set; }
        /// <summary>
        /// 流水号
        /// </summary>
        public int TaskNo { get; set; }
    }
    #endregion

    #region 缓存
    private CacheData Cache { get; set; }
    class CacheData
    {
        /// <summary>
        /// 流水号
        /// </summary>
        public int TaskNo { get; set; }
    }
    #endregion

    #region 实时日志
    private StepData Step { get; set; }
    class StepData
    {
        private string _msg = string.Empty;
        public string StepMsg
        {
            get
            {
                return this._msg;
            }
            set
            {
                if (string.IsNullOrWhiteSpace(value))
                {
                    this._msg = string.Empty;
                    return;
                }
                this._msg = $"{ClassName}|{System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}>>{value}";
            }
        }
    }
    private void StepMsg(string msg)
    {
        this.Step.StepMsg = msg;
    }
    #endregion

    #region 文件日志（运行需要 Nlog 配置）
    private void WriteLog(string message)
    {
        K8.LSF.Client.Log(new K8.LSF.Log { Data = message });
    }
    #endregion

    /// <summary>
    /// 和 PLC 通讯对象
    /// </summary>
    private BizData BizData { get; set; }
    public int Execute(BizData writer)
    {
        // Excute 方法外使用 BizData
        this.BizData = writer;

        // 返回参数
        var result = 0;

        this.StepMsg($"硫化取胎位（位置：{this.Param.Loc},缓存任务：{Cache.TaskNo}，任务编号：{this.Data.TaskNo }）.");

        if (Cache.TaskNo == Data.TaskNo)
        {
            this.StepMsg($"任务编号：{Data.TaskNo}，已执行完成.");

            return result;
        }

        if (this.Data.TaskNo != 0)
        {
            var service = K8.RSF.Client.Create<IExWarehousingAfterService>();
            var finishResult = service.FinishTask(Data.TaskNo, Param.Loc);
            if (finishResult > 0)
            {
                this.StepMsg($"返回值：{finishResult}，任务编号：{Data.TaskNo}，完成成功.");

                Cache.TaskNo = Data.TaskNo;

                return result;
            }

            this.StepMsg($"返回值：{finishResult}，任务编号：{Data.TaskNo}，完成失败.");
        }

        return result;
    }
}
